<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 当then，catch，finally中没有处理promise实例的函数时，promise实例会直接穿透

// 例1
        // const p1 = new Promise((resolve,reject)=>{
        //     console.log('开始获取A数据');
        //     throw new Error('出错啦。。。')
        //     setTimeout(function(){
        //         console.log('获取A数据成功');
        //         resolve('good')
        //     },2500)
        // })
        // const p2 = p1.then(value=>{
        //     console.log('成功');
        // })
        // const p3 = p1.catch(reason=>{
        //     console.log('失败了',reason);

        // })
        // console.log(p1);
        // console.log(p2);
        // console.log(p3);
// 例1 分析：
// 在开始时进行错误抛出，不进入到循环定时器中 返回一个失败的promise实例 其值为错误信息
//  then方法中没有处理失败promise的函数 所以promise实例会直接穿透 
//  catch方法中有处理失败promise的函数，所以返回一个成功的promise实例，值为undefined





// 例2
    //    const p1 = new Promise((resolve,reject)=>{
    //         console.log('开始获取A数据');
    //         // throw new Error('出错啦。。。')
    //         setTimeout(function(){
    //             console.log('获取A数据成功');
    //             resolve('good')
    //         },2500)
    //     })
    //    const p2 =  p1.then(
    //         console.log('成功')
    //     )
    //     const p3 = p1.catch(
    //         console.log('失败了')

    //     )
    //     console.log(p1); 
    //     console.log(p2); 
    //     console.log(p3);
// 例2 分析：
// p1返回一个成功的promise实例 
// p1的then方法中没有处理成功实例的函数，promise进行穿透 
// p1的catch方法中没有处理成功实例的函数，promise也进行穿透

   
   
   </script>
</body>
</html>
